Skip to content

Conversation

@klausler
Copy link
Contributor

One of the checks for implicitly-typed names under IMPLICIT NONE has a false positive case for USE-associated items in COMMON blocks.

Fixes #159977.

One of the checks for implicitly-typed names under IMPLICIT NONE
has a false positive case for USE-associated items in COMMON blocks.

Fixes llvm#159977.
@llvmbot llvmbot added flang Flang issues not falling into any other category flang:semantics labels Sep 22, 2025
@llvmbot
Copy link
Member

llvmbot commented Sep 22, 2025

@llvm/pr-subscribers-flang-semantics

Author: Peter Klausler (klausler)

Changes

One of the checks for implicitly-typed names under IMPLICIT NONE has a false positive case for USE-associated items in COMMON blocks.

Fixes #159977.


Full diff: https://github.com/llvm/llvm-project/pull/160173.diff

2 Files Affected:

  • (modified) flang/lib/Semantics/resolve-names.cpp (+2-1)
  • (added) flang/test/Semantics/bug159977.f90 (+11)
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index e97f0bf02a515..93fbbb58b06fd 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -3376,7 +3376,8 @@ bool ScopeHandler::CheckPossibleBadForwardRef(const Symbol &symbol) {
       context().SetError(symbol);
       return true;
     }
-    if ((IsDummy(symbol) || FindCommonBlockContaining(symbol)) &&
+    if ((IsDummy(symbol) ||
+            (!symbol.has<UseDetails>() && FindCommonBlockContaining(symbol))) &&
         isImplicitNoneType() && symbol.test(Symbol::Flag::Implicit) &&
         !context().HasError(symbol)) {
       // Dummy or COMMON was implicitly typed despite IMPLICIT NONE(TYPE) in
diff --git a/flang/test/Semantics/bug159977.f90 b/flang/test/Semantics/bug159977.f90
new file mode 100644
index 0000000000000..ee731c9fb170e
--- /dev/null
+++ b/flang/test/Semantics/bug159977.f90
@@ -0,0 +1,11 @@
+! RUN: %flang_fc1 -fsyntax-only -pedantic %s  2>&1 | FileCheck %s --allow-empty
+! Ensure no bogus "no explicit type for ..." error on USE-associated
+! implicitly-typed COMMON block object in scope with IMPLICIT NONE.
+! CHECK-NOT: error:
+module m
+  common /block/ var
+end
+subroutine test
+  use m
+  implicit none
+end

@klausler klausler merged commit 06fb26c into llvm:main Sep 23, 2025
12 checks passed
@klausler klausler deleted the bug159977 branch September 23, 2025 22:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

flang:semantics flang Flang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[flang][semantics] implicit none may leak to other program units

4 participants